import type { User } from '@/types/user'
import { defineStore } from 'pinia'
import { ref } from 'vue'

/**
 * export const useXXXStore = defineStore('xxx', () => {
 *      数据和方法
 *      定义用户数据
 *      存用户的方法
 *      删用户的方法
 *      记得返回数据和方法
 * })
 */
export const useUserStore = defineStore(
  'user',
  () => {
    // 对象的初始值我们有时候可以用undefined
    // 原因是{} 隐式转换boolean true
    // 骨架屏优化
    // 数组数据 可以根据数组的长度来判断数据是否请求响应回来了
    // 对象数据 是undefined数据还没有请求回来 数据请求回来就不是undefined
    // v-if v-else 用undefined可以方便我们做骨架屏优化
    const user = ref<User>()
    const setUser = (u: User) => {
      user.value = u
    }
    const delUser = () => {
      user.value = undefined
    }

    // 点击qq登录按钮存returnUrl 为了回退，原因是qq跳转returnUrl就没了，所以存到pinia持久化
    const returnUrl = ref('')
    const setReturnUrl = (val: string) => {
      returnUrl.value = val
    }
    return {
      user,
      setUser,
      delUser,
      returnUrl,
      setReturnUrl
    }
  },
  // 第三个参数配置持久化 设为true就是持久化
  {
    persist: true
  }
)
